package co.edu.uniquindio.sicorrespondencia.entities;

import java.io.Serializable;
import javax.persistence.*;

import org.jboss.seam.annotations.Name;

import java.util.Date;

/**
 * Esta entidad representa la prorroga y sus datos correspondientes Esta entidad
 * representa las prorrogas que tenga un trabajo de grado donde debe quedar
 * registrado la justificacion por la que se solicito prorroga y la nueva fecha
 * de entrega acordada
 * 
 * @author Tannia Rosero
 * @author Sofia Agudelo
 * 
 */
@Entity
@Table(name = "prorroga")
@Name("prorroga")
@NamedQueries(@NamedQuery(name = "listarProrrogas", query = "SELECT p FROM Prorroga p "+
		"LEFT JOIN p.trabajoGrado tg WHERE tg =:trabajo"))
public class Prorroga implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "idProrroga")
	private Integer idProrroga;
	@Column(name = "descripcionProrroga")
	private String descripcionProrroga;

	@Temporal(TemporalType.DATE)
	@Column(name = "fechaLimite")
	private Date fechaLimite;

	@Temporal(TemporalType.DATE)
	@Column(name = "fechaSolicitud")
	private Date fechaSolicitud;

	// bi-directional many-to-one association to TrabajoGrado
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "idTG")
	private TrabajoGrado trabajoGrado;

	private boolean estado;

	public Prorroga() {
	}

	/**
	 * Este metodo permite obtener idProrroga de la clase
	 * 
	 * @return el idProrroga
	 */
	public Integer getIdProrroga() {
		return idProrroga;
	}

	/**
	 * Este metodo permite fijar el idProrroga de la entidad
	 * 
	 * @param idProrroga
	 *            es el idProrroga a fijar
	 */
	public void setIdProrroga(Integer idProrroga) {
		this.idProrroga = idProrroga;
	}

	/**
	 * Este metodo permite obtener descripcionProrroga de la clase
	 * 
	 * @return el descripcionProrroga
	 */
	public String getDescripcionProrroga() {
		return descripcionProrroga;
	}

	/**
	 * Este metodo permite fijar el descripcionProrroga de la entidad
	 * 
	 * @param descripcionProrroga
	 *            es el descripcionProrroga a fijar
	 */
	public void setDescripcionProrroga(String descripcionProrroga) {
		this.descripcionProrroga = descripcionProrroga;
	}

	/**
	 * Este metodo permite obtener fechaLimite de la clase
	 * 
	 * @return el fechaLimite
	 */
	public Date getFechaLimite() {
		return fechaLimite;
	}

	/**
	 * Este metodo permite fijar el fechaLimite de la entidad
	 * 
	 * @param fechaLimite
	 *            es el fechaLimite a fijar
	 */
	public void setFechaLimite(Date fechaLimite) {
		this.fechaLimite = fechaLimite;
	}

	/**
	 * Este metodo permite obtener fechaSolicitud de la clase
	 * 
	 * @return el fechaSolicitud
	 */
	public Date getFechaSolicitud() {
		return fechaSolicitud;
	}

	/**
	 * Este metodo permite fijar el fechaSolicitud de la entidad
	 * 
	 * @param fechaSolicitud
	 *            es el fechaSolicitud a fijar
	 */
	public void setFechaSolicitud(Date fechaSolicitud) {
		this.fechaSolicitud = fechaSolicitud;
	}

	/**
	 * Este metodo permite obtener trabajoGrado de la clase
	 * 
	 * @return el trabajoGrado
	 */
	public TrabajoGrado getTrabajoGrado() {
		return trabajoGrado;
	}

	/**
	 * Este metodo permite fijar el trabajoGrado de la entidad
	 * 
	 * @param trabajoGrado
	 *            es el trabajoGrado a fijar
	 */
	public void setTrabajoGrado(TrabajoGrado trabajoGrado) {
		this.trabajoGrado = trabajoGrado;
	}

	/**
	 * Este metodo permite obtener estado de la clase
	 * 
	 * @return el estado
	 */
	public boolean isEstado() {
		return estado;
	}

	/**
	 * Este metodo permite fijar el estado de la entidad
	 * 
	 * @param estado
	 *            es el estado a fijar
	 */
	public void setEstado(boolean estado) {
		this.estado = estado;
	}

}